package com.carrental.vehicle.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.carrental.vehicle.dto.VehicleDTO;
import com.carrental.vehicle.entity.Vehicle;
import com.carrental.vehicle.vo.VehicleVO;

import java.util.List;

/**
 * 车辆服务接口
 */
public interface VehicleService extends IService<Vehicle> {

    /**
     * 根据ID获取车辆详情
     *
     * @param id 车辆ID
     * @return 车辆详情
     */
    VehicleVO getVehicleById(Long id);

    /**
     * 保存或更新车辆信息
     *
     * @param vehicleDTO 车辆信息DTO
     * @return 是否成功
     */
    boolean saveOrUpdateVehicle(VehicleDTO vehicleDTO);

    /**
     * 根据ID删除车辆
     *
     * @param id 车辆ID
     * @return 是否成功
     */
    boolean deleteVehicleById(Long id);

    /**
     * 分页查询车辆
     *
     * @param page    分页参数
     * @param vehicle 查询条件
     * @return 分页结果
     */
    Page<VehicleVO> pageVehicle(Page<Vehicle> page, Vehicle vehicle);

    /**
     * 根据车辆类型查询车辆列表
     *
     * @param type 车辆类型
     * @return 车辆列表
     */
    List<VehicleVO> listVehicleByType(Integer type);

    /**
     * 根据门店ID查询车辆列表
     *
     * @param storeId 门店ID
     * @return 车辆列表
     */
    List<VehicleVO> listVehicleByStore(Long storeId);

    /**
     * 根据品牌ID查询车辆列表
     *
     * @param brandId 品牌ID
     * @return 车辆列表
     */
    List<VehicleVO> listVehicleByBrand(Long brandId);

    /**
     * 更新车辆状态
     *
     * @param id     车辆ID
     * @param status 车辆状态
     * @return 是否成功
     */
    boolean updateVehicleStatus(Long id, Integer status);

    /**
     * 获取热门车型列表
     * @param limit 限制返回数量
     * @return 热门车型列表
     */
    List<VehicleDTO> getPopularVehicles(Integer limit);

    /**
     * 获取车辆详情
     *
     * @param id 车辆ID
     * @return 车辆详情DTO
     */
    VehicleDTO getVehicleDetail(Long id);

    /**
     * 更新车辆租赁次数
     *
     * @param vehicleId 车辆ID
     * @return 是否成功
     */
    boolean updateRentalCount(Long vehicleId);
} 